package com.gopay.remote.fundcps.service;

import com.gopay.common.PageInfo;
import com.gopay.common.exception.FundException;
import com.gopay.common.exception.GopayException;
import com.gopay.remote.fundcps.model.FundpGopayFastpayCards;
import com.gopay.remote.fundcps.model.FundpGopayOpenAcct;
import com.gopay.remote.fundcps.vo.FundpAcctAgreementVO;
import com.gopay.remote.fundcps.vo.FundpAddCardResultVO;
import com.gopay.remote.fundcps.vo.FundpFastpayCardsQueryVO;

import java.util.List;
import java.util.Map;

/**
 * 个人活期宝调用接口
 * @author yu_liu6@hnair.com
 * @date 2017-12-11 13:45:35
 */
public interface FundpGopayOpenAcctService {

    /**
     * 个人活期宝开户
     * @param param：custId-客户号；fundOrgNo-基金公司名称代码
     * @return
     * @throws FundException
     */
    FundpGopayOpenAcct personOpenAcct(Map<String, Object> param) throws FundException;

    /**
     * 根据主键查询开户信息
     * @param keyId
     * @return
     */
    FundpAcctAgreementVO getFundpOpenAcctInfoByKeyId(String keyId);

    /**
     * 根据条件查询开户信息
     * @param param
     * @return
     */
    List<FundpGopayOpenAcct> listFundbOpenAccs(Map<String,Object> param);

    /**
     * 根据条件分页查询开户信息
     * @param param
     * @param pageInfo
     * @return
     * @throws FundException
     */
    PageInfo listFundbOpenAccsforPage(Map<String,Object> param, PageInfo pageInfo) throws FundException;

    /**
     * 根据条件查询个人活期宝签约信息，供下载
     * @param param
     * @return
     * @throws FundException
     */
    List<FundpAcctAgreementVO> listFundbOpenAccsByCondition(Map<String, Object> param) throws FundException;

    /**
     * 查询可交易开户实体，未开户或不允许交易的状态返回null
     * @param custId 客户号
     * @param fundOrgNo 基金公司名称代码
     * @return
     * @throws FundException
     */
    FundpGopayOpenAcct getOpenAcctInfo(String custId, String fundOrgNo) throws FundException;

    /**
     * 查询可交易开户实体，未开户或不允许交易的状态返回null
     * @param custId 客户号
     * @param merchantId 基金公司客户号
     * @return
     * @throws FundException
     */
    FundpGopayOpenAcct getOpenAcctInfoByCustIdAndMerchantId(String custId, String merchantId) throws FundException;

    /**
     * 增卡
     * @param param ：custId-客户号；fundOrgNo-基金公司名称代码；bankCardNo-快捷支付卡号
     * @return
     * @throws GopayException
     */
    FundpAddCardResultVO addCard(Map<String, Object> param) throws FundException;

    /**
     * 根据条件查询有效支付卡
     * @param vo 查询vo
     * @return
     * @throws FundException
     */
    List<FundpGopayFastpayCards> listCardsByCondition(FundpFastpayCardsQueryVO vo) throws FundException;

    /**
     * 根据主键查询支付卡
     * @param keyId 主键
     * @return
     * @throws FundException
     */
    FundpGopayFastpayCards getCardByKeyId(String keyId) throws FundException;

    /**
     * 根据custId和fundOrgNo查询有效支付卡
     * @param custId
     * @param fundOrgNo 基金公司名称代码rtfund
     * @return
     * @throws FundException
     */
    List<FundpGopayFastpayCards> listCardsByCustIdAndFundOrgNo(String custId, String fundOrgNo) throws FundException;

    /**
     * 根据custId和merchantId查询有效支付卡
     * @param custId
     * @param merchantId 基金公司名称代码rtfund
     * @return
     * @throws FundException
     */
    List<FundpGopayFastpayCards> listCardsByCustIdAndMerchantId(String custId,
                                                                String merchantId, String cardNo) throws FundException;

}
